package com.ai.module.order.domain.bo;

import lombok.Data;

import java.io.Serializable;

/**
 * @author: MrHe
 * @create: 2024-02-05 11:50
 * @description:
 **/


@Data
public class WxpayTradeVo implements Serializable {

    /**
     *
     */
    private static final long serialVersionUID = 8189139771687842957L;

    // 由微信生成的应用ID，全局唯一。请求基础下单接口时请注意APPID的应用属性，应为公众号的APPID
    // 示例值：wxd678efh567hg6787
    private String appid;

    // 直连商户的商户号，由微信支付生成并下发。
    // 示例值：1230000109
    private String mchid;

    // 商品描述
    // 示例值：Image形象店-深圳腾大-QQ公仔
    private String description;

    // 商户系统内部订单号，只能是数字、大小写字母_-*且在同一个商户号下唯一
    // 示例值：1217752501201407033233368018
    private String out_trade_no;

    // 通知URL必须为直接可访问的URL，不允许携带查询串。
    // 示例值：https://www.weixin.qq.com/wxpay/pay.php
    private String notify_url;

    // 订单金额信息
    private WxTradeAmountVo amount;

    // 支付者信息 - JSAPI，必传
    private WxPayerVo payer;

    // 支付场景描述 - H5，必传
    private WxSceneInfoVo scene_info;

    public WxpayTradeVo() {
        super();
    }

    public WxpayTradeVo(String appid, String mchid, String description, String out_trade_no, String notify_url) {
        super();
        this.appid = appid;
        this.mchid = mchid;
        this.description = description;
        this.out_trade_no = out_trade_no;
        this.notify_url = notify_url;
    }

    @Data
    public static class WxTradeAmountVo {
        // 订单总金额，单位为分。
        // 示例值：100
        private long total;
        // CNY：人民币，境内商户号仅支持人民币。
        // 示例值：CNY
        private String currency = "CNY";

        public WxTradeAmountVo() {
            super();
        }

        public WxTradeAmountVo(long total) {
            super();
            this.total = total;
        }
    }

    @Data
    public static class WxPayerVo {
        // 用户在直连商户appid下的唯一标识。 下单前需获取到用户的Openid，Openid获取详见
        // 示例值：oUpF8uMuAJO_M2pxb1Q9zNjWeS6o
        private String openid;

        public WxPayerVo() {
            super();
        }

        public WxPayerVo(String openid) {
            super();
            this.openid = openid;
        }
    }

    @Data
    public static class WxSceneInfoVo {
        // 用户的客户端IP，支持IPv4和IPv6两种格式的IP地址。
        // 示例值：14.23.150.211
        private String payer_client_ip;
        // H5场景信息
        private WxH5InfoVo h5_info;

        public WxSceneInfoVo() {
            super();
        }

        public WxSceneInfoVo(String payer_client_ip) {
            super();
            this.payer_client_ip = payer_client_ip;
        }
    }

    @Data
    public static class WxH5InfoVo {
        // 场景类型
        // 示例值：iOS, Android, Wap
        private String type = "Wap";
    }

}
